#include "siyi_protocol.hpp"
// #include "log/log.h"
namespace siyi {

    std::ostream &operator<<(std::ostream &str, const std::vector<std::uint8_t> &bytes) {
        std::ios old_state(nullptr);
        old_state.copyfmt(std::cout);

        for (const auto &byte: bytes) {
            str << "0x" << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(byte) << " ";
        }

        std::cout.copyfmt(old_state);

        return str;
    }

//     bool Messenger::send(const std::vector<std::uint8_t> &message, std::string log) {
//         // Send the UDP packet
//         auto msg = message;
//         msg.resize(message.size());
//          std::cout << "[INFO] " << log << "  send:    " << msg << std::endl;
//         int tolen = sizeof(_addr);
//         const char *msg_buf = reinterpret_cast<const char*>(message.data());
// //        std::cout << "size : " << strlen(msg_buf) << "---" << message.size() << std::endl;
//         int sent = sendto(_sockfd, msg_buf, message.size(), 0,
//                           (struct sockaddr *) &_addr, tolen);
//         if (sent < 0) {
//             // std::cerr << "Error sending UDP packet: " << strerror(errno) << std::endl;
//             // LOG_ERROR("Error sending UDP packet:{}", strerror(errno));
//             return false;
//         }
//         return true;
//     }

//     std::vector<std::uint8_t> Messenger::receive_once(const std::string &log) {
//         char recv_buf[RECV_BUF_SIZE] = {0};
//         result.clear();
//         int nLen = sizeof(r_addr);
// //        std::cout << "nlen1 : " << nLen << std::endl;
//         int recv_len = recvfrom(_sockfd, recv_buf, RECV_BUF_SIZE, 0, (struct sockaddr *) &r_addr, &nLen);
// //        std::cout << "nlen2 : " << nLen << std::endl;
//         if (recv_len < 0) {
//             perror("recvfrom");
//             return {};
//         }
//         // std::cout << "receive flag : " << recv_len << std::endl;
//         // LOG_INFO("receive flag :{}", recv_len);
//         result.assign(recv_buf, recv_buf + sizeof(recv_buf) / sizeof(char));
//         result.resize(recv_len);
//         std::cout << "[INFO] " << log << "  received: " << result << std::endl;
// //
//         return result;
//     }

//     void Messenger::receive(std::vector<std::uint8_t> &udp_message, std::uint8_t &cmd_id){
//         udp_message.clear();
//         cmd_id = 0x00;
//         char recv_buf[RECV_BUF_SIZE] = {0};
//         int nLen = sizeof(_addr);
// //        std::cout << "nlen1 : " << nLen << std::endl;
//         int recv_len = recvfrom(_sockfd, recv_buf, RECV_BUF_SIZE, 0, (struct sockaddr *) &_addr, &nLen);
// //        std::cout << "nlen2 : " << nLen << std::endl;
//         if (recv_len < 0) {
//             return;
//         }
//         std::cout << "receive flag : " << recv_len << std::endl;
//         udp_message.assign(recv_buf, recv_buf + sizeof(recv_buf) / sizeof(char));
//         udp_message.resize(recv_len);
//         std::cout << "[INFO] " << "  received: " << udp_message << std::endl;
//         cmd_id = udp_message[7];
//     }



} // namespace siyi
